table of contents
UMOUNT(2) | Руководство программиста Linux | UMOUNT(2) |
ИМЯ¶
umount, umount2 - размонтирует файловую систему
ОБЗОР¶
#include <sys/mount.h> int umount(const char *target); int umount2(const char *target, int flags);
ОПИСАНИЕ¶
Вызовы umount() и umount2() удаляют присоединённую (самого верхнего уровня) файловую систему, примонтированную к target.
Для размонтирования файловых систем требуются права (Linux: мандат CAP_SYS_ADMIN).
В Linux 2.1.116 добавлен системный вызов umount2(), который, подобно umount(), размонтирует заданный объект, но позволяет указать дополнительные флаги flags, контролирующие поведение операции:
- MNT_FORCE (начиная с Linux 2.1.116)
- Принудительно размонтировать даже если файловая система занята. Может привести к потере данных. (Только для смонтированной NFS.)
- MNT_DETACH (начиная с Linux 2.4.11)
- Выполнить отложенное размонтирование: сделать точку монтирования недоступной для новых подключений, и выполнить настоящее размонтирование только когда точка доступа станет свободной.
- MNT_EXPIRE (начиная Linux 2.6.8)
- Пометить точку монтирования как недействительную. Если точка монтирования в это время не используется, то первоначальный вызов umount2() с этим флагом завершится с ошибкой EAGAIN, но пометит точку монтирования как недействительную. Точка монтирования остаётся недействительной до тех пор, пока какой-нибудь процесс не запросит к ней доступ. Второй вызов umount2() с флагом MNT_EXPIRE размонтирует недействительную точку монтирования. Этот флаг нельзя указывать вместе с MNT_FORCE или MNT_DETACH.
- UMOUNT_NOFOLLOW (начиная с Linux 2.6.34)
- Не следовать по ссылке, если target является символьной ссылкой. Это флаг помогает избежать проблем с безопасностью в программах принадлежащих root и с установленным битом set-user-ID, которые позволяют непривилегированным пользователям размонтировать файловые системы.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.
ОШИБКИ¶
Коды ошибок, описанные ниже, не зависят от типа файловой системы. У каждой файловой системы могут быть свои коды ошибок и своё собственное поведение. Подробности смотрите в исходном коде ядра.
- EAGAIN
- Вызов umount2() с флагом MNT_EXPIRE успешно пометил незанятую файловую систему как недействительную.
- EBUSY
- Объект target не может быть размонтирован, так как он занят.
- EFAULT
- Объект target указывает вне адресного пространства, доступного пользователю.
- EINVAL
- Объект target не является точкой монтирования. Или umount2() был вызван с флагом MNT_EXPIRE и с MNT_DETACH или MNT_FORCE.
- ENAMETOOLONG
- Значение пути длиннее чем MAXPATHLEN.
- ENOENT
- Указан пустой путь или одна из его частей не существует.
- ENOMEM
- Ядро не может выделить свободную страницу для копирования имени файла или данных.
- EPERM
- Вызывающий процесс не имеет требуемых привилегий.
ВЕРСИИ¶
Флаги MNT_DETACH и MNT_EXPIRE есть только в glibc начиная с версии 2.11.
СООТВЕТСТВИЕ СТАНДАРТАМ¶
Эти функции есть только в Linux, и они не должны использоваться в переносимых программах.
ЗАМЕЧАНИЯ¶
Изначально функция umount() вызывалась как umount(device) и возвращала ENOTBLK при попытке работы с любым неблочным устройством. В Linux 0.98p4 был добавлен вызов umount(dir) для поддержки анонимных устройств. В Linux 2.3.99-pre7 был убран вызов umount(device), остался только umount(dir) (теперь устройства могут быть подключены более чем к одной точке, поэтому указания только устройства недостаточно).
СМОТРИТЕ ТАКЖЕ¶
2010-06-19 | Linux |